package com.ruoyi.system.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.DzShitiMapper;
import com.ruoyi.system.domain.DzShiti;
import com.ruoyi.system.service.IDzShitiService;


import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.mapper.DzHuiyuanMapper;
import com.ruoyi.system.domain.DzHuiyuan;
import com.ruoyi.system.service.IDzHuiyuanService;

/**
 * 试卷题目关联Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-09-02
 */
@Service
public class DzShitiServiceImpl implements IDzShitiService 
{
    @Autowired
    private DzShitiMapper dzShitiMapper;

    @Autowired
    private ISysRoleService sysRoleService;

    @Autowired
    private IDzHuiyuanService dzHuiyuanService;

    /**
     * 查询试卷题目关联
     * 
     * @param stId 试卷题目关联主键
     * @return 试卷题目关联
     */
    @Override
    public DzShiti selectDzShitiByStId(Long stId)
    {
        return dzShitiMapper.selectDzShitiByStId(stId);
    }

    /**
     * 查询试卷题目关联列表
     * 
     * @param dzShiti 试卷题目关联
     * @return 试卷题目关联
     */
    @Override
    public List<DzShiti> selectDzShitiList(DzShiti dzShiti)
    {

        //权限控制
        SysUser user=  SecurityUtils.getLoginUser().getUser();
        List<SysRole> listRole= sysRoleService.selectRolesByUserId(user.getUserId());
        int datascope = 5;
        for(SysRole role:listRole){
            if( role.getDataScope()!=null&&Integer.parseInt(role.getDataScope())<datascope){
                datascope=Integer.parseInt(role.getDataScope());
            }
        }
        dzShiti.setDatascope(datascope);
        if(datascope==4){
            dzShiti.setCheckDeptId(user.getDeptId());
        }
        if(datascope==5){
            DzHuiyuan huiyuan =  dzHuiyuanService.selectDzHuiyuanByDn(user.getPhonenumber());
            if(huiyuan!=null){
                dzShiti.setCheckHuiyuanId(huiyuan.getId());
            }else{
                dzShiti.setCheckHuiyuanId(0l);
            }

        }
        return dzShitiMapper.selectDzShitiList(dzShiti);
    }

    @Override
    public List<DzShiti> selectDzShitiListWeb(DzShiti dzShiti)
    {
        return dzShitiMapper.selectDzShitiList(dzShiti);
    }

    /**
     * 新增试卷题目关联
     * 
     * @param dzShiti 试卷题目关联
     * @return 结果
     */
    @Override
    public int insertDzShiti(DzShiti dzShiti)
    {
        return dzShitiMapper.insertDzShiti(dzShiti);
    }

    @Override
    public int insertBatchDzShiti(List<DzShiti> dzShitiList) {

        DzShiti dzShiti = dzShitiList.get(0);
        //获取最大的排序号
        int  maxOrderNo =dzShitiMapper.getMaxorderno(dzShiti.getSjId(),dzShiti.getTiId());
        DzShiti temp = new DzShiti();
        temp.setSjId(dzShiti.getSjId());
        //获取已经存在的题目
        List<DzShiti> dsList = dzShitiMapper.selectDzShitiList(temp);
        //遍历list
        for(DzShiti dzShitiTemp:dzShitiList){
            //如果已经存在就不插入了，只修改分数
            if(!dsList.contains(dzShitiTemp)){
                maxOrderNo=maxOrderNo+1;
                dzShitiTemp.setOrderno(Long.parseLong(maxOrderNo+"") );
                dzShitiMapper.insertDzShiti(dzShitiTemp);
            }else{
                for(DzShiti temp2:dsList){
                    if(dzShitiTemp.getSjId()==temp2.getSjId()&&temp2.getTiId()==dzShitiTemp.getTiId()){
                        temp2.setFenshu(dzShitiTemp.getFenshu());
                        dzShitiMapper.updateDzShiti(temp2);
                    }
                }

            }
        }
        return 1;
    }


    /**
     * 修改试卷题目关联
     * 
     * @param dzShiti 试卷题目关联
     * @return 结果
     */
    @Override
    public int updateDzShiti(DzShiti dzShiti)
    {
        return dzShitiMapper.updateDzShiti(dzShiti);
    }

    /**
     * 批量删除试卷题目关联
     * 
     * @param stIds 需要删除的试卷题目关联主键
     * @return 结果
     */
    @Override
    public int deleteDzShitiByStIds(Long[] stIds)
    {
        return dzShitiMapper.deleteDzShitiByStIds(stIds);
    }

    /**
     * 删除试卷题目关联信息
     * 
     * @param stId 试卷题目关联主键
     * @return 结果
     */
    @Override
    public int deleteDzShitiByStId(Long stId)
    {
        return dzShitiMapper.deleteDzShitiByStId(stId);
    }


    @Override
    public int deleteDzShitiBySjId(Long sjId)
    {
        return dzShitiMapper.deleteDzShitiBySjId(sjId);
    }
}
